//package com.wave.traffic.alarm;
//
//
//import com.sun.jna.Native;
//import com.sun.jna.Pointer;
//import com.wave.traffic.CommonMethod.osSelect;
//import com.wave.traffic.NetSDKDemo.FRadarCallback;
//import com.wave.traffic.NetSDKDemo.HCNetSDK;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//
///**
// * 雷视摄像头
// */
//@Component
//@Order(value = 1)
//public class Alarm implements ApplicationRunner {
//
//
//    @Value("${traffic.config.hikvisionIp}")
//    private String hikvisionIp;
//
//    @Value("${traffic.config.hikvisionPort}")
//    private short hikvisionPort;
//
//    @Value("${traffic.config.hikvisionUser}")
//    private String hikvisionUser;
//
//    @Value("${traffic.config.hikvisionPassword}")
//    private String hikvisionPassword;
//
//    public static HCNetSDK hCNetSDK = null;
//
//    @Override
//    public void run(ApplicationArguments args) throws Exception {
//
//////    }
////
////    public void initHcNetSDK() {
//        if (hCNetSDK == null) {
//            if (!CreateSDKInstance()) {
//                System.out.println("Load SDK fail");
//                return;
//            }
//        }
//        //linux系统建议调用以下接口加载组件库
//        if (osSelect.isLinux()) {
//            HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
//            HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
//            //这里是库的绝对路径，请根据实际情况修改，注意改路径必须有访问权限
//            String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
//            String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
//
//            System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
//            ptrByteArray1.write();
//            hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
//
//            System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
//            ptrByteArray2.write();
//            hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
//
//            String strPathCom = System.getProperty("user.dir") + "/lib";
//            HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
//            System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
//            struComPath.write();
//            hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
//        }
//
//        /**初始化*/
//        hCNetSDK.NET_DVR_Init();
//        /**加载日志*/
//        hCNetSDK.NET_DVR_SetLogToFile(3, "../sdklog", false);
//
//        int lUserID = Alarm.Login_V40(0, hikvisionIp, hikvisionPort, hikvisionUser, hikvisionPassword);
//
//
//        FRadarCallback fRadarCallback = new FRadarCallback();
//
//        HCNetSDK.NET_DVR_ALARM_SEARCH_COND struCond = new HCNetSDK.NET_DVR_ALARM_SEARCH_COND();
//        struCond.dwSize = struCond.size();
//        struCond.dwAlarmComm = 0x4993;//0x4993-智能检测报警(雷视目标检测报警)
//        struCond.write();
//
//        System.out.println("登录用户：" + lUserID);
//        System.out.println("NET_DVR_GET_ALARM_INFO：" + HCNetSDK.NET_DVR_GET_ALARM_INFO);
//        System.out.println("size：" + struCond.dwSize);
//
//        //启动长连接
//        HCNetSDK.BYTE_ARRAY userData = new HCNetSDK.BYTE_ARRAY(32);
//        userData.byValue = ("userID:" + lUserID).getBytes();
//        userData.write();
//        Pointer pUserData = userData.getPointer();
//
//        int lHandle = hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARM_INFO, struCond.getPointer(), struCond.size(), fRadarCallback, pUserData);
//        if (lHandle == -1) {
//            System.out.println("error code：" + hCNetSDK.NET_DVR_GetLastError());
//            //printf("NET_DVR_GET_ALARM_INFO failed, error code: %d\n", NET_DVR_GetLastError());
//            System.out.println(hCNetSDK.NET_DVR_Logout(lUserID));
//            hCNetSDK.NET_DVR_Cleanup();
//            return;
//        }
//        while (true) {
//            //这里加入控制台输入控制，是为了保持连接状态，当输入Y表示结束
//            //System.out.print("请选择是否撤出(Y/N)：");
//            //Scanner input = new Scanner(System.in);
//            String str = "input.next()";
//            if (str.equals("Y")) {
//                break;
//            }
//        }
//        //关闭长连接
//        if (!hCNetSDK.NET_DVR_StopRemoteConfig(lHandle)) {
//            System.out.println("NET_DVR_StopRemoteConfig failed, error code: " + hCNetSDK.NET_DVR_GetLastError());
//        }
//        //注销用户
//        hCNetSDK.NET_DVR_Logout(lUserID);
//        //释放SDK资源
//        hCNetSDK.NET_DVR_Cleanup();
//    }
//
//    public static int Login_V40(int i, String ip, short port, String user, String psw) {
//        int lUserID = -1;
//        //注册
//        HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
//        HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
//
//        String m_sDeviceIP = ip;//设备ip地址
//        m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
//        System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
//
//        String m_sUsername = user;//设备用户名
//        m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
//        System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
//
//        String m_sPassword = psw;//设备密码
//        m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
//        System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
//
//        m_strLoginInfo.wPort = port;
//        m_strLoginInfo.bUseAsynLogin = false; //是否异步登录：0- 否，1- 是
////        m_strLoginInfo.byLoginMode=1;  //ISAPI登录
//        m_strLoginInfo.write();
//
//        lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
//        if (lUserID == -1) {
//            System.out.println("登录失败，错误码为" + hCNetSDK.NET_DVR_GetLastError());
//
//        } else {
//            System.out.println(ip + ":设备登录成功！");
//
//        }
//        return lUserID;
//    }
//
//
//    /**
//     * 动态库加载
//     *
//     * @return
//     */
//    private static boolean CreateSDKInstance() {
//        if (hCNetSDK == null) {
//            synchronized (HCNetSDK.class) {
//                String strDllPath = "";
//                try {
//                    if (osSelect.isWindows())
//                        //win系统加载库路径
//                        strDllPath = System.getProperty("user.dir") + "\\lib\\HCNetSDK.dll";
//                    else if (osSelect.isLinux())
//                        //Linux系统加载库路径
//                        strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
//                    hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
//                } catch (Exception ex) {
//                    System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
//                    return false;
//                }
//            }
//        }
//        return true;
//    }
//
//}
